package iface.aplicativo.negocio.entidade;

import iface.arquitetura.entidade.Entidade;

import java.io.Serializable;
import java.util.Date;
import java.util.List;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.Transient;

import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.CascadeType;

@Entity
@Table(name = "venda_veiculo")
@SequenceGenerator(name = "sq_venda_veiculo", sequenceName = "sq_venda_veiculo", allocationSize = 1, initialValue = 1)
public class VendaVeiculo implements Entidade {
	private static final long serialVersionUID = 1L;

	@Id
	@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "sq_venda_veiculo")
	@Column(name = "id_venda_veiculo")
	private Long idVendaVeiculo;

	@ManyToOne
	@JoinColumn(name = "id_veiculo")
	private Veiculo veiculo;

	@ManyToOne
	@JoinColumn(name = "id_pessoa")
	private Pessoa cliente;

	@OneToOne
	@JoinColumn(name = "id_entrada_veiculo")
	private EntradaVeiculo entradaVeiculo;

	@Column(name = "vlr_venda")
	private Double vlrVenda;

	@Temporal(TemporalType.DATE)
	@Column(name = "dt_venda")
	private Date dtVenda;

	@Temporal(TemporalType.DATE)
	@Column(name = "dt_atualizacao")
	private Date dtAtualizacao;

	@Cascade(CascadeType.DELETE_ORPHAN)
	@OneToMany(mappedBy = "vendaVeiculo")
	private List<Lancamento> lancamentos;

	@Transient
	private Double valorTotal;

	public VendaVeiculo() {
	}

	public Serializable getIdentificador() {
		return getIdVendaVeiculo();
	}

	public Long getIdVendaVeiculo() {
		return idVendaVeiculo;
	}

	public void setIdVendaVeiculo(Long idVendaVeiculo) {
		this.idVendaVeiculo = idVendaVeiculo;
	}

	public Veiculo getVeiculo() {
		return veiculo;
	}

	public void setVeiculo(Veiculo veiculo) {
		this.veiculo = veiculo;
	}

	public Pessoa getCliente() {
		return cliente;
	}

	public void setCliente(Pessoa cliente) {
		this.cliente = cliente;
	}

	public Date getDtVenda() {
		return dtVenda;
	}

	public void setDtVenda(Date dtVenda) {
		this.dtVenda = dtVenda;
	}

	public Date getDtAtualizacao() {
		return dtAtualizacao;
	}

	public void setDtAtualizacao(Date dtAtualizacao) {
		this.dtAtualizacao = dtAtualizacao;
	}

	public List<Lancamento> getLancamentos() {
		return lancamentos;
	}

	public void setLancamentos(List<Lancamento> lancamentos) {
		this.lancamentos = lancamentos;
	}

	public Double getVlrVenda() {
		return vlrVenda;
	}

	public void setVlrVenda(Double vlrVenda) {
		this.vlrVenda = vlrVenda;
	}

	public EntradaVeiculo getEntradaVeiculo() {
		return entradaVeiculo;
	}

	public void setEntradaVeiculo(EntradaVeiculo entradaVeiculo) {
		this.entradaVeiculo = entradaVeiculo;
	}

	public Double getValorTotal() {
		valorTotal = 0.0;
		for (Lancamento lancamento : this.getLancamentos()) {
			valorTotal += lancamento.getValorTotal();
		}
		return valorTotal;
	}

}